<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>    
//了解 import&&require的区别 
//模块加载的时间 
   /*
   require 运行时加载 
   import  编译时加载(效率更高) (由于是编译时加载 所以import命令会提升整个模块的顶端) 
   */
    
//模块的本质  

    /*
    require 模块即使对象 输入时必须查找对象属性 
    import   es6模块不是对象 
            (而是通过export命令显示指定输入的代码 再通过import命令输入)
            (导致es6模块本身无法被引用  因为它不是对象)
            由于es6模块是编译时加载 使得静态分析成为可能 拓展js的语法         
    */


/*
CommonJs 模块和es6模块的区别 
    1. commonjs 模块默认采取 非严格模式 
    2. es6      自动采取严格模式 不管有没有再模块头上加 "use strict"
    3. commonjs 模块输出的是一个值的拷贝 es6输出的是值的引用 
    */    

//严格模式 
    //变量必须声明后使用 
    //函数的参数不能有同名属性否则报错
    //不能使用with语句
    //不能对只读属性赋值否则报错 
    //不能删除不可删除的属性 否则报错 
    //不能删除变量delete prop会报错 
    //eval不hi在它的外层作用域 引用变量  eval 和arguments不能被重新赋值 
    //arguments 不会自动反映函数参数的变化  不能使用argments.callee argments.caller 
    //禁止this 指向全局对象 
    //等...
    //!! 要注意this' 在es6模块中 顶层的this指向undefined 即不应该在顶层代码中使用this 

    

//摘自 阮一峰图书  
    //CommonJs模块就是对象  输入时必须查找对象属性      


</script>